/**
 * 数据服务类，用于加载题目和试卷数据
 */
import cosFileService from '../services/CosFileService';
import cosConfig from './cosConfig';

// 试卷列表数据
const paperList = [
  {
    name: "24-25-2  C语言期末考试A 20250619",
    src: "https://cos.roginx.ink/python/（湖工商）（期末）24-25-2  C语言期末考试A 20250619.html",
    date: "2025-06-19"
  },
  {
    name: "Python：24-25-1期末考试3-2025-01-05 11:20~12:50",
    src: "https://cos.roginx.ink/python/（湖工商）（期末）24-25-1Python期末考试1-2025-01-05 8点.html",
    date: "2025-01-05"
  },
  {
    name: "数据库原理期末考试（24-25-1学期）（A卷）",
    src: "https://cos.roginx.ink/python/（湖工商）（期末）数据库原理期末考试（24-25-1学期）（A卷）.html",
    date: "2025-01-04"
  },
  {
    name: "Python：24-25-1期末考试1-2025-01-05 8点",
    src: "https://cos.roginx.ink/python/（湖工商）（期末）24-25-1Python期末考试1-2025-01-05 8点.html",
    date: "2025-01-05"
  },
  {
    name: "2024-2025-1数据结构A期末测试卷（B）",
    src: "https://cos.roginx.ink/python/（湖工商）（期末）2024-2025-1数据结构A期末测试卷（B）.html",
    date: "2025-01-03"
  },
  {
    name: "2024-2025-1数据结构A期末测试卷（C）",
    src: "https://cos.roginx.ink/python/（湖工商）（期末）2024-2025-1数据结构A期末测试卷（C）.html",
    date: "2025-01-03"
  },
  {
    name: "2024-2025-1数据结构A期末测试卷（D）",
    src: "https://cos.roginx.ink/python/（湖工商）（期末）2024-2025-1数据结构A期末测试卷（D）.html",
    date: "2025-01-03"
  },
  {
    name: "2024-2025-1数据结构（计-重修）期末测试卷",
    src: "https://cos.roginx.ink/python/（湖工商）（期末）2024-2025-1数据结构（计-重修）期末测试卷.html",
    date: "2025-01-02"
  },
  {
    name: "2024-2025-1计算机基础与大数据分析期末测试卷",
    src: "https://cos.roginx.ink/python/（湖工商）（期末）2024-2025-1数据结构（计-重修）期末测试卷.html",
    date: "2025-01-01"
  }
];

/**
 * 获取试卷列表
 * @returns {Promise<Array>} 试卷列表数据
 */
export const getPaperList = () => Promise.resolve(paperList);

/**
 * 获取选择题数据
 * @returns {Promise<Array>} 选择题数据
 */
export const getChoiceQuestions = async () => {
  try {
    const response = await fetch('https://cos.roginx.ink/python/选择题.json');
    return response.ok ? await response.json() : [];
  } catch (error) {
    console.error('获取选择题失败:', error);
    return [];
  }
};

/**
 * 获取代码题数据
 * @returns {Promise<Array>} 代码题数据
 */
export const getCodeQuestions = async () => {
  try {
    const response = await fetch('https://cos.roginx.ink/python/代码题.json');
    return response.ok ? await response.json() : [];
  } catch (error) {
    console.error('获取代码题失败:', error);
    return [];
  }
};

/**
 * 加载所有题目数据
 * @returns {Promise<Object>} 包含选择题和代码题的对象
 */
export const loadAllQuestions = async () => {
  const [choiceQuestions, codeQuestions] = await Promise.all([
    getChoiceQuestions(),
    getCodeQuestions()
  ]);
  
  return {
    choiceQuestions,
    codeQuestions
  };
};

/**
 * 初始化COS文件服务
 * @param {Object} config - COS配置
 * @returns {Boolean} 是否初始化成功
 */
export const initCosFileService = (config = {}) => {
  // 使用默认配置，并合并传入的配置
  const mergedConfig = { ...cosConfig, ...config };
  
  // 确保初始化前处理路径格式
  if (mergedConfig.Prefix && !mergedConfig.Prefix.endsWith('/')) {
    mergedConfig.Prefix += '/';
  }
  
  // 如果COS服务已经初始化，检查配置是否相同
  if (cosFileService.isInitialized) {
    const currentConfig = cosFileService.config;
    const configChanged = 
      currentConfig.Bucket !== mergedConfig.Bucket ||
      currentConfig.Region !== mergedConfig.Region ||
      currentConfig.Prefix !== mergedConfig.Prefix ||
      currentConfig.useAnonymous !== mergedConfig.useAnonymous;
    
    // 如果配置没有变化，直接返回已初始化状态
    if (!configChanged) {
      return true;
    }
  }
  
  // 初始化COS服务
  return cosFileService.init(mergedConfig);
};

/**
 * 获取文件内容 - 直接通过URL
 * @param {String} url - 文件URL
 * @returns {Promise<ArrayBuffer>} 文件内容
 */
export const getFileContent = async (url) => {
  try {
    const response = await fetch(url, { 
      method: 'GET',
      headers: {
        'Cache-Control': 'no-cache'
      },
      mode: 'cors'
    });
    
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    
    return await response.arrayBuffer();
  } catch (error) {
    console.error('获取文件内容失败:', error);
    throw error;
  }
};

/**
 * 获取文件库数据
 * @param {Boolean} useCosService - 是否使用COS服务
 * @param {String} path - 目录路径
 * @returns {Promise<Array>} 文件列表
 */
export const getFileLibrary = async (useCosService = false, path = '') => {
  console.log('获取文件库数据:', { useCosService, path });
  
  // 如果使用COS服务
  if (useCosService && cosFileService.isInitialized) {
    try {
      const result = await cosFileService.listFiles(path);
      return [...result.directories, ...result.files];
    } catch (error) {
      console.error('获取COS文件列表失败:', error);
      // 失败时返回模拟数据
      return getMockFileLibrary();
    }
  } else {
    // 返回模拟数据
    return getMockFileLibrary();
  }
};

/**
 * 获取模拟文件库数据
 * @returns {Promise<Array>} 模拟文件列表
 */
export const getMockFileLibrary = () => {
  return new Promise((resolve) => {
    // 模拟延迟
    setTimeout(() => {
      resolve([
        {
          id: '1',
          name: 'Python基础',
          type: 'directory',
          category: '教学资料',
          size: '-',
          updateTime: '2025-01-10',
          children: [
            {
              id: '1-1',
              name: 'Python语法基础.pdf',
              type: 'document',
              category: '教学资料',
              size: '2.5MB',
              updateTime: '2025-01-10',
              url: 'https://www.africau.edu/images/default/sample.pdf'
            },
            {
              id: '1-2',
              name: 'Python函数详解.docx',
              type: 'document',
              category: '教学资料',
              size: '1.8MB',
              updateTime: '2025-01-08',
              url: 'https://file-examples.com/storage/fe2d55a651274c0f2cd2631/2017/02/file-sample_100kB.docx'
            }
          ]
        },
        {
          id: '2',
          name: '数据结构',
          type: 'directory',
          category: '教学资料',
          size: '-',
          updateTime: '2025-01-05',
          children: []
        },
        {
          id: '3',
          name: '数据库原理',
          type: 'directory',
          category: '教学资料',
          size: '-',
          updateTime: '2025-01-03',
          children: []
        },
        {
          id: '4',
          name: '期末考试大纲.pdf',
          type: 'pdf',
          category: '考试资料',
          size: '1.2MB',
          updateTime: '2025-01-01',
          url: 'https://www.africau.edu/images/default/sample.pdf'
        },
        {
          id: '5',
          name: '期末复习重点.docx',
          type: 'word',
          category: '考试资料',
          size: '950KB',
          updateTime: '2024-12-28',
          url: 'https://file-examples.com/storage/fe2d55a651274c0f2cd2631/2017/02/file-sample_100kB.docx'
        },
        {
          id: '6',
          name: '实验报告模板.docx',
          type: 'word',
          category: '实验资料',
          size: '750KB',
          updateTime: '2024-12-25',
          url: 'https://file-examples.com/storage/fe2d55a651274c0f2cd2631/2017/02/file-sample_100kB.docx'
        },
        {
          id: '7',
          name: '课程表.xlsx',
          type: 'excel',
          category: '教学资料',
          size: '620KB',
          updateTime: '2024-12-20',
          url: 'https://file-examples.com/storage/fe2d55a651274c0f2cd2631/2017/02/file_example_XLSX_10.xlsx'
        },
        {
          id: '8',
          name: '课程介绍.pptx',
          type: 'powerpoint',
          category: '教学资料',
          size: '3.5MB',
          updateTime: '2024-12-15',
          url: 'https://file-examples.com/storage/fe2d55a651274c0f2cd2631/2017/08/file_example_PPT_250kB.ppt'
        },
        {
          id: '9',
          name: '实验指导书.pdf',
          type: 'pdf',
          category: '实验资料',
          size: '2.1MB',
          updateTime: '2024-12-10',
          url: 'https://www.africau.edu/images/default/sample.pdf'
        }
      ]);
    }, 500);
  });
};

/**
 * 获取文件类型
 * @param {String} fileName - 文件名
 * @returns {String} 文件类型
 */
export const getFileType = (fileName) => {
  if (!fileName) return 'unknown';
  
  const extension = fileName.split('.').pop().toLowerCase();
  
  const typeMap = {
    // 文档类型
    'pdf': 'pdf',
    'doc': 'word',
    'docx': 'word',
    'xls': 'excel',
    'xlsx': 'excel',
    'ppt': 'powerpoint',
    'pptx': 'powerpoint',
    'txt': 'text',
    'md': 'markdown',
    'markdown': 'markdown',
    'html': 'html',
    'htm': 'html',
    
    // 图片类型
    'jpg': 'image',
    'jpeg': 'image',
    'png': 'image',
    'gif': 'image',
    'svg': 'image',
    'webp': 'image',
    
    // 视频类型
    'mp4': 'video',
    'avi': 'video',
    'mov': 'video',
    'wmv': 'video',
    'flv': 'video',
    'webm': 'video',
    
    // 音频类型
    'mp3': 'audio',
    'wav': 'audio',
    'ogg': 'audio',
    'flac': 'audio',
    
    // 压缩文件类型
    'zip': 'archive',
    'rar': 'archive',
    '7z': 'archive',
    'tar': 'archive',
    'gz': 'archive',
    
    // 代码类型
    'js': 'code',
    'ts': 'code',
    'py': 'code',
    'java': 'code',
    'c': 'code',
    'cpp': 'code',
    'cs': 'code',
    'php': 'code',
    'rb': 'code',
    'go': 'code',
    'json': 'code',
    'xml': 'code',
    'css': 'code',
    'scss': 'code',
    'less': 'code',
    'sql': 'code'
  };
  
  return typeMap[extension] || 'unknown';
};

export default {
  getPaperList,
  getChoiceQuestions,
  getCodeQuestions,
  loadAllQuestions,
  getFileLibrary,
  getFileType
}; 